1. Introducción

En este seminario analizamos cómo factores estructurales y tecnológicos impactan en la salud mental en España.

Pregunta de investigación: ¿Actúa la tecnología como un escudo protector ante la depresión o, por el contrario, profundiza las desigualdades existentes?

Para responderla, nos centramos en tres dimensiones clave:

  1. Contexto de Salud Mental: Identificar los grupos de riesgo.
  2. Contexto Tecnológico: Mapear la brecha digital por edad y territorio.
  3. Interacción: Cruzar las variables de Empleo, Educación y Territorio.

Utilizamos datos masivos procesados con R, provenientes de dos fuentes oficiales:

  • Encuesta Europea de Salud.
  • Encuesta sobre Equipamiento y Uso de Tecnologías (TIC) del INE.

El análisis revela que grupos vulnerables, como los Desempleados, presentan patrones paradójicos de uso tecnológico que discutiremos a continuación.

2. Contexto de Salud Mental

Para entender la magnitud del problema, primero analizamos la distribución de la depresión según factores demográficos clave.

Depresión por Actividad Económica y Sexo

El siguiente gráfico revela una realidad contundente sobre los determinantes sociales de la salud.

Dato Crítico: El grupo de En Desempleo presenta las tasas más altas de Cuadro Depresivo Mayor, superando significativamente a los ocupados.

# Código extraído de: Tablas_graficos_CSV.R


# Preparación
datos_grafico_actividad <- mis_datos_salud_mental$depresion_actividad_economica %>%
  rename(Porcentaje = Total) %>% 
  mutate(Porcentaje = as.numeric(sub(",", ".", Porcentaje, fixed = TRUE))) %>%
  filter(
    Sexo != "Ambos sexos",
    `Actividad.económica` != "TOTAL",        
    `Prevalencia.depresión` %in% c("Cuadro depresivo mayor", "Otros cuadros depresivos")
  )

# Gráfico
g_actividad_apilado <- ggplot(datos_grafico_actividad,
                              aes(x = reorder(`Actividad.económica`, Porcentaje), 
                                  y = Porcentaje, 
                                  fill = `Prevalencia.depresión`)) +
  geom_col() + 
  facet_wrap(~ Sexo) + 
  coord_flip() + 
  labs(
    title = "Depresión por Actividad Económica y Sexo",
    subtitle = "Prevalencia de cuadros depresivos según situación laboral",
    x = "",
    y = "Porcentaje Total (%)",
    fill = "Diagnóstico"
  ) +
  scale_fill_brewer(palette = "Reds") +
  theme_minimal() +
  theme(legend.position = "bottom",
        plot.title = element_text(face="bold"))

print(g_actividad_apilado)

Intensidad de la Depresión por Edad

Analizamos la gravedad de los síntomas a lo largo del ciclo vital.

  • La intensidad aumenta progresivamente con la edad.

  • Existe una brecha de género notable en todos los grupos etarios.

# Código extraído de: Tablas_graficos_CSV.R

# AJUSTE: fig.height=5. Más compacto.

datos_grafico_edad <- mis_datos_salud_mental$depresion_sexo_y_grupo_de_edad %>%
  rename(Porcentaje = Total) %>% 
  mutate(Porcentaje = as.numeric(sub(",", ".", Porcentaje, fixed = TRUE))) %>%
  filter(
    Sexo != "Ambos sexos",
    Edad != "TOTAL", 
    `Intensidad.depresión` %in% c("Leve", "Moderada", "Moderadamente grave", "Grave")
  )

g_edad_apilado <- ggplot(datos_grafico_edad,
                         aes(x = Edad, 
                             y = Porcentaje, 
                             fill = `Intensidad.depresión`)) +
  geom_col() + 
  facet_wrap(~ Sexo) + 
  labs(
    title = "Intensidad de Depresión por Edad y Sexo",
    x = "Grupo de Edad",
    y = "Porcentaje (%)",
    fill = "Intensidad"
  ) +
  scale_fill_brewer(palette = "Reds") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

print(g_edad_apilado)

3. Contexto de Uso de TICs

A continuación, establecemos el perfil tecnológico de España, observando la brecha generacional en las distintas Comunidades Autónomas.

  1. Niños (10-15 años): Nativos digitales.

  2. Adultos (16-74 años): Usuarios mayoritarios.

  3. Mayores (75+ años): Donde reside la mayor brecha de acceso.

# Corrección nombres
uso_tic_total_corregido <- uso_tic_total %>%
  mutate(
    Comunidad = case_when(
      Comunidad == "Andalucía" ~ "Andalucía",
      Comunidad == "Aragón" ~ "Aragón",
      Comunidad == "Asturias, Principado de" ~ "Asturias",
      Comunidad == "Balears, Illes" ~ "Baleares",
      Comunidad == "Canarias" ~ "Canarias",
      Comunidad == "Cantabria" ~ "Cantabria",
      Comunidad == "Castilla y León" ~ "Castilla y León",
      Comunidad == "Castilla - La Mancha" ~ "Castilla - La Mancha",
      Comunidad == "Comunitat Valenciana" ~ "Comunidad Valenciana",
      Comunidad == "Extremadura" ~ "Extremadura",
      Comunidad == "Galicia" ~ "Galicia",
      Comunidad == "Madrid, Comunidad de" ~ "Madrid",
      Comunidad == "Murcia, Región de" ~ "Murcia",
      Comunidad == "Navarra, Comunidad Foral de" ~ "Navarra",
      Comunidad == "País Vasco" ~ "País Vasco",
      Comunidad == "Rioja, La" ~ "La Rioja",
      Comunidad == "Ceuta" ~ "Ceuta",
      Comunidad == "Melilla" ~ "Melilla",
      TRUE ~ Comunidad
    )
  )

# Pivotaje
uso_tic_total_pivotada <- uso_tic_total_corregido %>% 
  pivot_longer(
    cols= -Comunidad,
    names_to = "Grupo_Edad",
    values_to = "Frecuencia_Total"
  )

orden_grupos <- c("Frecuencia_Total_Niños", "Frecuencia_Total_Adultos", "Frecuencia_Total_Mayores")
names_grupos <- c("Niños (10-15)", "Adultos (16-74)", "Mayores (75+)")

uso_tic_ordenada <- uso_tic_total_pivotada %>% 
  mutate(Grupo_Edad = factor(Grupo_Edad, levels = orden_grupos, labels = names_grupos))

# Gráfico
ggplot(uso_tic_ordenada, aes(x=Comunidad, y=Frecuencia_Total, fill=Grupo_Edad))+
  geom_bar(stat = "identity", position = "dodge")+
  labs(
    title= "Perfil de Uso Frecuente de las TIC por Edad y Comunidad",
    y= "Porcentaje de Uso Promedio (%)",
    x= "",
    fill = "Grupo de Edad")+
  scale_fill_brewer(palette = "Blues") +
  theme_classic()+
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size=10),
    legend.position = "top"
  )

4. Relación TICs con Depresión por Comunidades

¿Existe un patrón territorial? Utilizamos un mapa interactivo para explorar si las comunidades más “conectadas” tienen mejores indicadores de salud mental.

Instrucciones: Pase el ratón por encima de cada comunidad para ver el desglose detallado de uso de internet por grupos de edad.

# Código extraído de: Mapa_España_TICS.R

# AJUSTE: layout="l-page" es CRÍTICO aquí para que el mapa se vea grande y bonito.

mapa_españa_ccaa <- esp_get_ccaa(moveCAN = TRUE)

# Corrección para mapa
uso_tic_total_corregido_mapa <- uso_tic_total %>%
  mutate(
    Comunidad = case_when(
      Comunidad == "Balears, Illes" ~ "Baleares",
      Comunidad == "Castilla - La Mancha" ~ "Castilla-La Mancha",
      Comunidad == "Comunitat Valenciana" ~ "Comunidad Valenciana",
      Comunidad == "Madrid, Comunidad de" ~ "Madrid",
      Comunidad == "Murcia, Región de" ~ "Murcia",
      Comunidad == "Navarra, Comunidad Foral de" ~ "Navarra",
      Comunidad == "Rioja, La" ~ "La Rioja",
      TRUE ~ Comunidad
    )
  )

mapa_con_datos <- mapa_españa_ccaa %>%
  left_join(uso_tic_total_corregido_mapa, by = c("ccaa.shortname.es" = "Comunidad"))

# Tooltip arreglado para que se vea bien
mapa_con_datos <- mapa_con_datos %>%
  mutate(
    tooltip_data = paste0(
      '<b>', ccaa.shortname.es, "</b><br>", 
      "Uso Adultos: ", round(Frecuencia_Total_Adultos, 1), "%<br>",
      "Uso Niños: ", round(Frecuencia_Total_Niños, 1), "%<br>",
      "Uso Mayores: ", round(Frecuencia_Total_Mayores, 1), "%"
    )
  )

colores_ccaa <- c(
  "Andalucía" = "#C0C0C0", "Aragón" = "#FFD700", "Asturias" = "#0000FF",            
  "Baleares" = "#800080", "Canarias" = "#FFA500", "Cantabria" = "#008000",           
  "Castilla y León" = "#B0C4DE", "Castilla-La Mancha" = "#FF0000",
  "Comunidad Valenciana" = "#ADD8E6", "Extremadura" = "#8B4513",         
  "Galicia" = "#40E0D0", "Madrid" = "#FFFF00", "Murcia" = "#FFC0CB",              
  "Navarra" = "#A52A2A", "País Vasco" = "#00FF00", "La Rioja" = "#DA70D6",            
  "Ceuta" = "#4682B4", "Melilla" = "#5F9EA0", "Cataluña" = "#FFDAB9"
)

mapa_estatico_gg <- ggplot(data = mapa_con_datos) +
  geom_sf(
    aes(fill = ccaa.shortname.es, text = tooltip_data),
    color = "white", size = 0.2 
  ) +
  # Quitamos geom_sf_text porque a veces satura el mapa interactivo
  scale_fill_manual(values = colores_ccaa) +
  theme_void() +
  theme(legend.position = "none")

mapa_interactivo_gg <- ggplotly(mapa_estatico_gg, tooltip = "text")

mapa_interactivo_final <- mapa_interactivo_gg %>%
  style(hoveron = "fills", traces = 1) %>% 
  layout(
    hoverlabel = list(bgcolor = "white", bordercolor = "black", font = list(color = "black"))
  )

mapa_interactivo_final

5. Relación TICs con Depresión por Nivel de Estudios

Analizamos si la educación actúa como factor protector. El siguiente gráfico de doble eje muestra un cruce revelador:

  • Línea Azul (TICs): A mayor nivel educativo, mayor uso de tecnología.

  • Línea Roja (Depresión): A mayor nivel educativo, la depresión cae drásticamente.

# Código extraído de: Grafico_nivel_estudios.R

# AJUSTE: fig.height=6 y l-body-outset para que las líneas se vean claras.

if(exists("tabla_nivel_estudios_final")){
  
  max_tics <- max(tabla_nivel_estudios_final$Porcentaje_TICS, na.rm = TRUE)
  max_depresion <- max(tabla_nivel_estudios_final$Porcentaje_Depresion, na.rm = TRUE)
  factor_escala <- max_tics / max_depresion

  ggplot(tabla_nivel_estudios_final, 
         aes(x = as.numeric(factor(Nivel_de_estudios, 
                                   levels = c("Básico e inferior", "Intermedio", "Superior"))), 
             group = 1)) +
    
    geom_line(aes(y = Porcentaje_TICS, color = "Uso de TICs"), linewidth = 1.2) +
    geom_point(aes(y = Porcentaje_TICS, color = "Uso de TICs"), size = 4) +
    geom_text(aes(y = Porcentaje_TICS, label = round(Porcentaje_TICS, 1)), vjust = -1.5, fontface="bold") +
    
    geom_line(aes(y = Porcentaje_Depresion * factor_escala, color = "Depresión"), linewidth = 1.2) +
    geom_point(aes(y = Porcentaje_Depresion * factor_escala, color = "Depresión"), size = 4) +
    geom_text(aes(y = Porcentaje_Depresion * factor_escala, label = round(Porcentaje_Depresion, 1)), vjust = 2, fontface="bold") +
    
    scale_y_continuous(
      name = "Uso de TICs (%)",
      sec.axis = sec_axis(~ . / factor_escala, name = "Depresión (%)")
    ) +
    
    scale_x_continuous(
      breaks = 1:3,
      labels = c("Básico e inferior", "Intermedio", "Superior"),
      name = "Nivel de Estudios"
    ) +
    
    scale_color_manual(values = c("Uso de TICs" = "#1f77b4", "Depresión" = "#d62728")) +
    
    labs(
      title = "Nivel de Estudios: Factor Protector",
      subtitle = "Relación inversa entre adopción tecnológica y depresión",
      color = ""
    ) +
    theme_classic() +
    theme(legend.position = "bottom")
}

6. Relación TICs con Empleabilidad

Finalmente, llegamos a la “Paradoja Digital”. A menudo se asume que la conexión digital mejora las oportunidades, pero los datos muestran una realidad más compleja.

Comparamos dos grupos con niveles similares de uso de internet, pero realidades opuestas:

  1. Estudiantes: Alta conectividad y baja depresión.

  2. Desempleados: Alta conectividad y Muy alta depresión.

df_contexto <- mis_datos_salud_mental$depresion_actividad_economica %>%
  
  # 1. Renombrar usando nombres reales (Más seguro que el índice 1, 2...)
  rename(
    Actividad = `Actividad.económica`,
    Tipo_Depresion = `Prevalencia.depresión`,
    Porcentaje = Total
  ) %>%
  
  # 2. Filtros estándar
  filter(
    Sexo == "Ambos sexos",
    Tipo_Depresion == "Cuadro depresivo mayor",
    Actividad != "TOTAL"
  ) %>%
  
  mutate(
    # 3. ¡CORRECCIÓN CLAVE! Usamos parse_number (de tu práctica)
    Tasa_Depresion = parse_number(Porcentaje, locale = locale(decimal_mark = ",")),
    
    # 4. Usamos grepl() (R base) o igualdad exacta para homologar
    Clave_Union = case_when(
      Actividad == "Parados" ~ "En desempleo",
      Actividad == "Jubilado/a o prejubilado/a" ~ "Jubilado/Pensionista",
      Actividad == "Labores del hogar" ~ "Labores del hogar",
      Actividad == "Incapacitado/a para trabajar" ~ "Incapacitado",
      TRUE ~ "Otros"
    ),
    
    # 5. Lógica visual simple
    Color_Barra = ifelse(Clave_Union == "En desempleo", "#C0392B", "#95A5A6")
  ) %>%
  select(Clave_Union, Actividad, Tasa_Depresion, Color_Barra)

# ==============================================================================
# 2. DATOS TIC (Uso de Internet)
# ==============================================================================

lista_frecuencias <- c(
  "Han usado Internet diariamente (al menos 5 días a la semana)",
  "Han utilizado internet varias veces al día"
)

df_tic_preparado <- mis_datos_tic$uso_internet_socioeconomico %>%
  
  # 1. Renombrar usando los nombres que genera make.names (sin tildes)
  rename(
    Grupo = Clase.de.población, 
    Características = Características.socioeconómicas, 
    Frecuencia = Frecuencia.de.uso, 
    Total_TIC = Total
  ) %>%
  
  # 2. Filtros (usando grepl para buscar "diariamente")
  filter(
    Grupo == "Total de personas (16 a 74 años)",
    Frecuencia %in% lista_frecuencias
    
  ) %>%
  
  mutate(
    # 3. Usamos parse_number otra vez
    Tasa_Internet = parse_number(Total_TIC, locale = locale(decimal_mark = ",")),
    
    # 4. Homologación con grepl (equivalente a str_detect)
    Clave_Union = case_when(
      Características == "Situación laboral: Activos ocupados" ~ "Trabajando",
      Características == "Situación laboral: Activos parados" ~ "En desempleo",
      Características == "Situación laboral: Inactivos: Estudiantes" ~ "Estudiando",
      Características == "Situación laboral: Inactivos: Pensionistas" ~ "Jubilado/Pensionista",
      Características == "Situación laboral: Inactivos: Labores del hogar" ~ "Labores del hogar",
      TRUE ~ "Otros"
    )
  ) %>%
  
  
  group_by(Clave_Union) %>%
  summarise(Tasa_Internet = mean(Tasa_Internet, na.rm = TRUE))

# ==============================================================================
# 3. UNIÓN FINAL
# ==============================================================================
df_final<- left_join(df_contexto, df_tic_preparado, by = "Clave_Union") %>%
  filter(!is.na(Tasa_Internet)) %>% 
  select(Clave_Union, Tasa_Depresion, Tasa_Internet, Color_Barra)

g1 <- ggplot(df_contexto, aes(x = reorder(Actividad, -Tasa_Depresion), y = Tasa_Depresion)) +
  # Barras con color condicional (Rojo para desempleo)
  geom_col(aes(fill = Color_Barra), width = 0.6, alpha = 0.9) + 
  
  # Etiquetas numéricas sobre las barras
  geom_text(aes(label = paste0(Tasa_Depresion, "%")), 
            vjust = -0.5, fontface = "bold", color = "#2C3E50", size = 3.5) +
  
  scale_fill_identity() +
  # Truco técnico: str_wrap parte los textos largos del eje X
  scale_x_discrete(labels = function(x) stringr::str_wrap(x, width = 10)) + 
  scale_y_continuous(limits = c(0, max(df_contexto$Tasa_Depresion) + 1.5)) +
  
  # Títulos con formato HTML (ggtext)
  labs(
    title = "<span style='font-size:14pt'>1. El Contexto</span>",
    subtitle = "El <span style='color:#C0392B'><b>Desempleo</b></span> es el factor crítico en la salud mental base.",
    x = "", y = ""
  ) +
  
  theme_fivethirtyeight() +
  theme(
    plot.title = element_markdown(face = "bold"),
    plot.subtitle = element_markdown(size = 10),
    axis.text.x = element_text(size = 8.5, face = "bold", lineheight = 0.9),
    axis.text.y = element_blank(),
    panel.grid.major = element_blank(),
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA)
  )

# ==============================================================================
# 5. VISUALIZACIÓN: GRÁFICO 2 (EL GIRO)
# ==============================================================================
g2 <- ggplot(df_final_narrativa, aes(x = Tasa_Internet, y = Tasa_Depresion)) +
  # Línea de tendencia
  geom_smooth(method = "lm", se = FALSE, color = "aquamarine1", linetype = "solid", size = 1) +
  
  # Puntos principales con borde blanco (estilo 'pop')
  geom_point(aes(fill = Clave_Union), size = 6, shape = 21, color = "white", stroke = 1.5) +
  
  # ggforce: Elipse para resaltar la paradoja (Estudiantes vs Parados)
  geom_mark_ellipse(aes(filter = Clave_Union %in% c("En desempleo", "Estudiando"),
                        label = Clave_Union,
                        description = "Perfiles opuestos"),
                    label.fontsize = 8, 
                    label.buffer = unit(5, "mm"),
                    con.cap = 0,
                    color = "grey50") +
  
  # ggrepel: Etiquetas para el resto de puntos sin solapamiento
  geom_text_repel(aes(label = Clave_Union), 
                  data = subset(df_final_narrativa, !Clave_Union %in% c("En desempleo", "Estudiando")),
                  size = 3.5, color = "grey40", point.padding = 0.5) +
  
  scale_fill_tableau() +
  labs(
    title = "<span style='font-size:14pt'>2. El Giro (TICs)</span>",
    subtitle = "Alta tecnología no garantiza salud mental: comparar <b style='color:#F28E2B'>Estudiantes</b> vs <b style='color:#E15759'>Parados</b>.",
    x = "Uso Diario de Internet (%)", 
    y = "Depresión Mayor (%)",
    caption = "Fuente: Elaboración propia con datos INE"
  ) +
  
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_markdown(face = "bold"),
    plot.subtitle = element_markdown(size = 10),
    legend.position = "none",
    axis.title = element_text(size = 9, face = "bold", color = "grey40"),
    panel.grid.minor = element_blank(),
    panel.grid.major = element_line(color = "grey95")
  )

# ==============================================================================
# 6. COMPOSICIÓN FINAL (PATCHWORK)
# ==============================================================================
#Ponemos un gráfico encima del otro con g1 / g2 porque sino se visualiza mal 
layout_final <- g1 / g2 + 
  plot_annotation(
    title = 'IMPACTO DEL TRABAJO Y LA BRECHA DIGITAL EN LA SALUD MENTAL',
    subtitle = 'Análisis cruzado de Encuesta Europea de Salud y Encuesta TIC',
    theme = theme(plot.title = element_text(size = 18, face = "bold", hjust = 0.5))
  )

# Mostrar resultado final
print(layout_final)